Ни для кого не секрет, что число
2n при любом целом неотрицательном n в двоичной
системе счисления имеет очень простой вид – в старшем разряде стоит единица, а
затем следует n нулей. В десятичной системе счисления эти числа не столь
однообразны, однако и среди них встречаются те, которые начинаются с единицы.
Вычислите, сколько таких чисел в
заданном диапазоне.
Вход. Два
целых числа n1 и n2 (0 ≤ n1
< n2 ≤ 109), разделенные пробелом.
Выход. Вывести количество чисел,
являющихся степенями двойки и принадлежащих отрезку [2n1;
2n2], у которых в десятичной системе счисления в
старшем разряде стоит единица.
Пример входа
0 10
Пример выхода
4
математика – логарифмы
Среди всех n-значных чисел
от 10n-1 до 10n – 1 всегда
существует одно и только одно число, начинающееся с единицы и являющееся
степенью двойки. Например, среди двузначных таким будет число 16, среди
трехзначных 128, четырехзначных 1024 и так далее. Отсюда можно заключить, что
количество чисел на интервале [1 .. 2k], являющихся степенью
двойки и начинающихся с единицы, равно количеству цифр в десятичном
представлении числа 2k. Обозначим его через f(k).
Тогда количество искомых чисел на интервале [2n1;
2n2] равно f(n2) – f(n1
– 1).
Количество цифр в десятичном
представлении числа n равно . Число 2k состоит из цифр.
Читаем входные данные. Вычисляем
и выводим ответ. Воспользуемся равенством = чтобы формула работала
корректно и для случая n1 = 0.
scanf("%d %d",&n1,&n2); n1--;
d1 = (int)(n1*log10(2.0) + 1);
d2 = (int)(n2*log10(2.0) + 1);
printf("%d\n",d2 - d1);